Stateless와 Stateful Protocol
✒️ 2025-06-02 22:33 내용 수정
참고 자료 : 위키백과 무상태 프로토콜, Inpa dev's 아주 쉽게 이해하는 Stateful / Stateless 차이, Geeksforgeeks Difference Between Stateless and Stateful Protocol, tutorialspoint Difference Between Stateless and Stateful Protocols
Stateless Protocol
모든 요청을 각각 독립적으로 처리하는 프로토콜
- 상태 정보를 저장하지 않아 서버에선 이전 요청에 대한 정보를 처리할 필요가 없다.
- 각각의 통신 요청을 독립적인 요청과 응답의 쌍으로 된 트랜잭션으로 취급한다.
- 무상태 프로토콜의 각각의 통신은 이전 통신과 구분되며 연결되지 않는다.
- 무상태 프로토콜의 각 정보 패킷은 다른 패킷의 참조 없이 그 자체로 전달된다.
- 서버와 클라이언트 간의 의존성이 비교적 느슨하다.
- HTTP, UDP, DNS, REST API, CDN 등이 해당된다.
동작
- 클라이언트가 서버로 요청을 전송한다.
- 인증 토큰, 요청 파라미터 등 요청 처리에 필요한 정보를 모두 담아 보낸다.
- 서버는 요청에 포함된 내용으로 요청을 처리하여 응답을 생성한다.
- 서버에 요청에 관한 상태를 저장하지 않고 클라이언트로 응답을 보낸다.
장점
- 구현 시 구조가 단순하다.
- 확장성이 뛰어나다.
- 세션 상세 정보나 이전 요청에 대한 정보를 저장할 필요가 없기에 리소스 요구량이 적다.
- 상태를 저장하지 않기에 서버에 문제가 생기더라도 다른 서버가 이를 이어받아 처리할 수 있다.
단점
- 요청 전송 시 요청 처리에 필요한 데이터를 모두 담아 전송하기 때문에 요청 전송 시 데이터가 많이 소모된다.
- 네트워크 비용이 늘어난다.
- 서로 연관성 있는 연속적인 요청을 처리할 때 불리하다.
- 로그인, 장바구니, 게임 상황 같은 작업 처리가 어렵다.
- 매 요청마다 보안 토큰이나 자격 증명을 반복해서 처리해야 한다.
Stateful Protocol
서버가 클라이언트의 상태를 보존하는 프로토콜
- 서버는 세션 정보를 저장하여 서버와 클라이언트 간의 일관성 있는 상호작용을 처리할 수 있다.
- 로그인, 은행 업무, 장바구니 등과 같은 기능 구현에 사용된다.
- Stateful 애플리케이션은 Backing Storage가 필요하다.
- 서버와 클라이언트 간의 의존성이 높으며, 서버 사이드에서 세션 데이터를 저장한다.
- FTP(File Transfer Protocol), TCP, Telnet 등이 해당된다.
동작
- 대표적 예시로 TCP 3-Way Handshake가 있다.
- 클라이언트는 서버로 요청을 전송하고 상태를 저장한다.
- 서버는 요청을 수신하고 클라이언트에 응답을 전송하며 새 상태를 저장한다.
- 클라이언트는 응답을 수신한 뒤 서버로 새 요청을 보내고 또 다른 상태를 저장한다.
- 서버는 클라이언트에 새 요청에 대한 응답을 전송한 뒤 또 다른 상태를 저장한다.
장점
- 서버와 클라이언트 간의 요청과 응답을 추적할 수 있어 서로 연관된 연속적인 요청 처리가 가능하다.
- 양방향 통신과 같이 연결 중심의 통신에 적합하다.
단점
- 구현 시 구조가 복잡하다.
- 확장성이 떨어진다.
- 서버가 멈추거나 문제가 생겼을 때 세션 정보를 백업/복제하지 않는다면 상태가 유실될 수 있다.